/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Mercado.view;

import Mercado.model.Cadastro;
import Mercado.model.Estoque;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JTextField;

/**
 *
 * @author rafael
 */
public class Venda_Panel extends JTabbedPane{
    private JPanel configura, addItem, listaItens;
    private Mercado.controller.Venda_controller controller;
    
    public Venda_Panel(Cadastro cad, Estoque e){
        controller = new Mercado.controller.Venda_controller(cad,e);
        this.setTabPlacement(this.BOTTOM);
        configura   = aba_cliente();
        addItem     = aba_addItem();
        listaItens  = aba_listaItems();
        this.addTab("Carregar Cliente",configura);
        this.addTab("Adicionar produto",addItem);
        this.addTab("Listar Produtos",listaItens);
        ligaAbas(false);
    }

    public Cadastro getCad() {
        return controller.getCad();
    }

    public Estoque getE() {
        return controller.getE();
    }

    public void setCad(Cadastro cad) {
        controller.setCad(cad);
    }

    public void setE(Estoque e) {
        controller.setE(e);
    }
    
    private void ligaAbas(boolean b) {
        controller.ligaAbas(b,this);
    }

    private JPanel aba_cliente() {
        JPanel aba          = new JPanel();
        aba.setLayout(null);
        JTextField tfCodigo = new JTextField();
        JLabel lbCodigo     = new JLabel("Código do Cliente:");
        JLabel lbAviso      = new JLabel("");
        JLabel lbnome       = new JLabel("Nome:");
        JTextField tfnome   = new JTextField();
        JButton iniciar     = new JButton("Iniciar Compra");
        JButton encerrar    = new JButton("Finalizar Compra");
        JButton cancelar    = new JButton("Cancelar Compra");
        JButton checar      = new JButton("Checar");
        tfnome.setEditable(false);
        encerrar.setEnabled(false);
        cancelar.setEnabled(false);
        
        lbCodigo.   setBounds(10, 10, 150, 20);
        tfCodigo.   setBounds(170, 10, 290, 20);
        checar.     setBounds(470, 10, 100, 20);
        lbnome.     setBounds(10, 40, 150, 20);
        tfnome.     setBounds(170, 40, 400, 20);
        iniciar.    setBounds(10, 70, 160, 20);
        encerrar.   setBounds(180, 70, 190, 20);
        cancelar.   setBounds(380, 70, 190, 20);
        lbAviso.    setBounds(250, 100, 300, 20);
        
        aba.add(tfCodigo);
        aba.add(tfnome);
        aba.add(lbAviso);
        aba.add(iniciar);
        aba.add(encerrar);
        aba.add(cancelar);
        aba.add(lbCodigo);
        aba.add(checar);
        aba.add(lbnome);
        
        checar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                controller.checaCliente(aba);
            }
        });
        iniciar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                controller.iniciaVenda(aba);
                if(!iniciar.isEnabled())
                    ligaAbas(true);
            }
        });
        
        encerrar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ev) {
                controller.encerraVenda(aba);
                ligaAbas(false);
            }
        });
        
        cancelar.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent ev) {
                controller.cancelaVenda(aba);
                ligaAbas(false);
            }
        });
        
        return aba;
    }

    private JPanel aba_addItem() {
        JPanel aba = new JPanel();
        JLabel lbcod,lbnome,lbqtd,lbpreco,lbqtd2, lbsbt;
        JTextField tfcod, tfnome, tfqtd, tfpreco, tfqtd2, tfsbt;
        JButton btchk, btadd;
        aba.setLayout(null);
        
        lbcod   = new JLabel("Código do Produto:");
        lbnome  = new JLabel("Nome:");
        lbqtd   = new JLabel("Qtd. em estoque:");
        lbqtd2  = new JLabel("Qtd. a comprar:");
        lbpreco = new JLabel("Preço individual:");
        lbsbt   = new JLabel("Subtotal:");
        btadd   = new JButton("Adicionar");
        btchk   = new JButton("Checar");
        tfcod   = new JTextField();
        tfnome  = new JTextField();
        tfqtd   = new JTextField();
        tfqtd2  = new JTextField("1");
        tfpreco = new JTextField();
        tfsbt   = new JTextField();
        
        tfnome. setEditable(false);
        tfqtd.  setEditable(false);
        tfpreco.setEditable(false);
        tfsbt.  setEditable(false);
        btadd.  setEnabled(false);
        
        lbcod.  setBounds(10, 10, 180, 20);
        lbnome. setBounds(10, 40, 180, 20);
        lbqtd.  setBounds(10, 70, 180, 20);
        lbpreco.setBounds(10, 100, 180, 20);
        lbqtd2. setBounds(10,130, 180, 20);
        lbsbt.  setBounds(10,160, 180, 20);
        tfcod.  setBounds(200, 10, 290, 20);
        tfnome. setBounds(200, 40, 400, 20);
        tfqtd.  setBounds(200, 70, 400, 20);
        tfpreco.setBounds(200, 100, 400, 20);
        tfqtd2. setBounds(200,130, 400, 20);
        tfsbt.  setBounds(200, 160, 400, 20);
        btchk.  setBounds(500, 10, 100, 20);
        btadd.  setBounds(200, 190, 400, 20);
        
        aba.add(tfcod);
        aba.add(tfnome);
        aba.add(tfpreco);
        aba.add(tfqtd);
        aba.add(tfqtd2);
        aba.add(tfsbt);
        aba.add(btadd);
        aba.add(btchk);
        aba.add(lbcod);
        aba.add(lbnome);
        aba.add(lbpreco);
        aba.add(lbqtd);
        aba.add(lbqtd2);
        aba.add(lbsbt);
        
        btchk.addActionListener((ActionEvent ev) -> {
            controller.checaProduto(aba);
        });
        
        tfqtd2.addKeyListener(new KeyListener() {
            @Override
            public void keyTyped(KeyEvent e) {}
            @Override
            public void keyPressed(KeyEvent e) {}
            @Override
            public void keyReleased(KeyEvent e) {
                controller.calculaPreco(aba);
            }
        });
        
        btadd.addActionListener((ActionEvent e1) -> {
            controller.addCarrinho(aba);
        });
        
        return aba;
    }

    private JPanel aba_listaItems() {
        JPanel lis = new JPanel();
        lis.setLayout(null);
        JLabel codigo       = new JLabel("Código");
        JLabel nome         = new JLabel("Nome");
        JLabel preco        = new JLabel("Preço Unitário");
        JLabel quantidade   = new JLabel("Quantidade");
        JLabel precototal   = new JLabel("Preço Total");
        JButton remover     = new JButton("Remover Item");
        codigo.     setBounds(5,5,124,20);
        nome.       setBounds(129,5,124,20);
        preco.      setBounds(253,5,124,20);
        quantidade. setBounds(377,5,124,20);
        precototal. setBounds(501,5,124,20);
        remover.    setBounds(10,365,600,20);
        
        lis.add(nome);
        lis.add(preco);
        lis.add(codigo);
        lis.add(precototal);
        lis.add(quantidade);
        lis.add(remover);
        
        lis.addComponentListener(new ComponentListener() {
            @Override
            public void componentShown(ComponentEvent e) {
                controller.atualizaTabela(lis);
            }
            @Override
            public void componentResized(ComponentEvent e) {}
            @Override
            public void componentMoved(ComponentEvent e) {}
            @Override
            public void componentHidden(ComponentEvent e) {}
        });
        
        remover.addActionListener((ActionEvent e1) -> {
            controller.removeItem(lis);
        });
        
        return lis;
    }  
}
